package creation.simpleFactory;

import creation.pojo.CommonPoints;
import creation.pojo.Points;
import creation.pojo.TheisPoints;

import java.lang.invoke.SwitchPoint;

public class SimpleFactory {
    /**
     * 工厂类包含必要的逻辑判断  工厂和产品的职责区分明确。
     * 客户端无需知道所创建具体产品的类名，只需知道参数即可。
     * 也可以引入配置文件，在不修改客户端代码的情况下更换和添加新的具体产品类。 反射机制
     *
     *
     * 违背了开闭原则
     * 增加系统的复杂度和理解难度
     * 简单工厂模式使用了 static 工厂方法，造成工厂角色无法形成基于继承的等级结构。
     * 系统扩展困难，一旦增加新产品不得不修改工厂逻辑，在产品类型较多时，可能造成逻辑过于复杂
     * @param param
     * @return
     */
    public static Points getPoints(String param) {
        switch(param){
            case "COMMON":
                return new CommonPoints();
            case "Theis":
                return new TheisPoints();
            default:
                throw new RuntimeException("");
        }
    }

    public static Points getSimplePoint() {
        return getPoints("COMMON");
    }
}
